package com.puzzlebazar.client.squaregrid.view;

import com.puzzlebazar.client.util.Observable;
import com.puzzlebazar.client.util.Recti;
import com.puzzlebazar.client.util.Vec2i;

public interface HighlightConstraints extends Observable {

	/**
	 * Returns true if the highlighter handles the passed cell
	 * 
	 * @param cellLoc Location of the cell
	 * @return True if the cell should be highlighted
	 */
	public abstract boolean canHandleCell(Vec2i cellLoc);

	/**
	 * Returns true if the highlighter handles the passed vertex
	 * 
	 * @param vertexLoc Location of the vertex
	 * @return True if the vertex should be highlighted
	 */
	public abstract boolean canHandleVertex(Vec2i vertexLoc);

	/**
	 * Returns true if the highlighter handles the passed vertical edge
	 * 
	 * @param edgeLoc Location of the edge
	 * @return True if the edge should be highlighted
	 */
	public abstract boolean canHandleVerticalEdge(Vec2i edgeLoc);

	/**
	 * Returns true if the highlighter handles the passed horizontal edge
	 * 
	 * @param edgeLoc Location of the edge
	 * @return True if the edge should be highlighted
	 */
	public abstract boolean canHandleHorizontalEdge(Vec2i edgeLoc);

	/**
	 * Returns the group of cell to light when lighting a single cell
	 * 
	 * @param cellLoc Location of the cell to light
	 * @return The cell group to light, or null to light a unique cell
	 */
	public abstract Recti cellGroup(Vec2i cellLoc);
	
}